package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISalaryCycleDAO;
import org.jsola.hr.dto.SalaryCycleAddDTO;
import org.jsola.hr.dto.SalaryCycleUpdateDTO;
import org.jsola.hr.entity.SalaryCycleDO;
import org.jsola.hr.query.SalaryCycleQuery;
import org.jsola.hr.vo.SalaryCycleListVO;
import org.jsola.hr.vo.SalaryCycleVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface ISalaryCycleService extends IService<ISalaryCycleDAO, SalaryCycleDO> {

    /**
     * 新增计薪周期设置
     * @param salaryCycleAddDTO 新增计薪周期设置DTO
     * @param tokenUser 当前用户
     * @return 计薪周期设置详情信息
     */
    SalaryCycleVO save(SalaryCycleAddDTO salaryCycleAddDTO, TokenUser tokenUser);

    /**
     * 修改计薪周期设置
     * @param salaryCycleUpdateDTO 修改计薪周期设置DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(SalaryCycleUpdateDTO salaryCycleUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除计薪周期设置，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param salaryCycleIds 计薪周期设置id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...salaryCycleIds);

    /**
     * 根据计薪周期设置id查找
     * @param salaryCycleId 计薪周期设置id
     * @param siteId 所属站点id
     * @return 计薪周期设置详情信息
     */
    SalaryCycleVO selectById(String salaryCycleId, String siteId);

    /**
     * 查询计薪周期设置
     * @param salaryCycleQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪周期设置列表信息
     */
    List<SalaryCycleListVO> select(SalaryCycleQuery salaryCycleQuery, String siteId);

    /**
    * 查询计薪周期设置记录数
    * @param salaryCycleQuery 查询条件
    * @param siteId 所属站点id
    * @return 计薪周期设置记录数
    */
    int selectCount(SalaryCycleQuery salaryCycleQuery, String siteId);

    /**
     * 分页查询计薪周期设置
     * @param salaryCycleQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪周期设置列表信息
     */
    Page<SalaryCycleListVO> selectPage(SalaryCycleQuery salaryCycleQuery, String siteId);


    /**
     * 根据计薪周期设置id查找
     * @param salaryCycleId 计薪周期设置id
     * @param siteId 所属站点id
     * @return 计薪周期设置
     */
    SalaryCycleDO selectDOById(String salaryCycleId, String siteId);

    /**
     * 查询计薪周期设置
     * @param salaryCycleQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪周期设置列表
     */
    List<SalaryCycleDO> selectDO(SalaryCycleQuery salaryCycleQuery, String siteId);

    /**
     * 新增或修改计薪周期设置
     * @param salaryCycleUpdateDTO 修改计薪周期设置DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    SalaryCycleVO saveOrUpdate(SalaryCycleUpdateDTO salaryCycleUpdateDTO, TokenUser tokenUser);

    /**
     * 根据计薪周期设置siteId查找
     * @param siteId 所属站点id
     * @return 计薪周期设置详情信息
     */
    SalaryCycleDO selectDOBySiteId(String siteId);
}


